<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    /* 
    桶排序的弊端  如果数组的数据稀松  那么会创建很多无效桶
    在这里学习基数排序
    所谓的基数排序 就是根据数字的有效位或基数（这也是它为什么叫基数排 序）将整数分布到桶中。基数是基于数组中值的记数制的

    白话说 就是先排列个位数  再排列十位数 ... 依次类推  直接所有有效位都排列完
    */

    const arr = [35, 2, 26, 24, 5, 8, 34, 1, 56, 99, 33];

    function radixSort(arr) {
      const base = 10 ; // 桶的数量 固定十个 
      let divider = 1

      let maxValue = Math.max(...arr)
      let newArr = []
      // 当divider > 最大值时停止循环
      while(divider <= maxValue){
        // 构建二维数组 
        const buckets = [...Array(10)].map(()=>[]) 
        // 添加数据  遍历每个小桶
        for(let item of arr){
          // 精准取到每个位数的值  并放到同一小桶
          buckets[Math.floor(item / divider) % base].push(item) 

        }
        // 
        // 一共处理了两轮  每轮处理的结果  注意每轮处理后 一定覆盖旧的arr  保证每次循环都是循环新的arr才有意义
        console.log( buckets);
        arr = [].concat(...buckets);

        divider *= base

      }
      console.log(arr);
    }
    radixSort(arr)

  </script>
</body>

</html>